Proxy backend: vite.config.js chuyển tiếp '/api' và '/uploads' tới http://localhost:3000 (tránh CORS, dùng URL tương đối).
Tính năng chính
Trang tính năng chính
pages/Home.jsx:
Hiển thị Slider, danh sách “Sản phẩm mới” qua components/list-product.
pages/product-detail.jsx:
Tải chi tiết sản phẩm và biến thể.
Nạp danh mục màu/size từ API; nếu lỗi, fallback vào dữ liệu sản phẩm.
Suy luận variantId theo màu/size, kiểm soát số lượng theo tồn kho, thêm giỏ hàng (addToCart), hiển thị giá gốc/giảm.
pages/cart.jsx:
Tải giỏ hàng nếu đã đăng nhập; nếu chưa, hiển thị trống.
Lấy chi tiết sản phẩm theo product_id để hiện tên/ảnh.
Cập nhật số lượng với debounce, UI lạc quan; xóa item.
Tính tổng; kiểm tra hợp lệ theo tồn kho; đặt hàng qua createOrder rồi điều hướng tới /user/orders.
pages/orders.jsx:
Liệt kê đơn của tôi, chuẩn hóa các field phổ biến (id, createdAt, status, total).
pages/order-detail.jsx:
Tải đơn hàng, map danh sách items + ảnh/tên sản phẩm (fetch thêm nếu thiếu), hiển thị địa chỉ giao hàng và tổng tiền; có thêm fetch getUserById để hiển thị địa chỉ tài khoản mặc định nếu có.
pages/addresses.jsx:
Lấy profile từ useOutletContext() của user-layout, render danh sách địa chỉ đã chuẩn hóa.
pages/user-layout.jsx, pages/user-profile.jsx, components/UserSidebar.jsx: bố cục và thông tin người dùng (đã có khung).
CSDL và khởi tạo (tự tạo bảng)
Được tạo trong config/db.js khi khởi động:
users (customer/admin)
categories
products
sizes, colors (danh mục chuẩn)
product_variants (size/color/stock/price theo sản phẩm, unique theo product-size-color)
carts, cart_items (1 cart active/user)
orders, order_items (order từ cart, giảm stock variant)
Ràng buộc FK phù hợp, có transaction cho thay đổi nhạy cảm.